TweensyGroupのコンストラクタについて
- 2009 年 9月 9 日
これまで調べたTweensyFXのサンプルファイル全てで、TweensyGroupのインスタンスが生成されています。BulgeFXなんかはインスタンスがあっても使われていないので定型的に入れられているだけと思いますが。
ここで気になったことがあって、TweensyGroupのインスタンス生成時に、
new TweensyGroup(false, true);
と宣言していること。このコンストラクタ引数がなんだろうと思ったので記録しておきます。
TweensyGroupのコンストラクタは以下のシンタックス。
引数はすべて同名のプロパティを設定されます。
TweensyGroup(lazyMode:Boolean = true, useObjectPooling:Boolean = false, refreshType:String = "time") |
この各プロパティが何を表すものか調べてみた。
Tweensyの説明は、多くの方が書かれてますがこの部分の説明を見かけなかったのもあって、ウチはニッチなところでエントリーしようかと…。
-
lazyMode:Boolean
- Tweenerでいうところのoverwriteと同様。
- 同じプロパティをのトゥイーンさせるが重なった場合、自動的に前のトゥイーンを削除するかどうか。期待通りアニメーションさせるにはtrueを使うことが多いはず。
- Tweenerのoverwriteでは、その動作の分負荷が増えるってことだったので仕組み的に似ているlazyModeも同様かと思います。パフォーマンスを上げるならfalseにして必要に応じてトゥイーンを消す感じで。
サンプル:lazyModeの確認
lazyModeがtrueの場合、同じプロパティのトゥイーンは最後に設定したもので上書きされるが、falseの場合、それぞれ個別にトゥイーンすることが確認できる。
-
useObjectPooling:Boolean
- TweensyGroupが作るTweensyTimelineのインスタンスを記録しておくかどうか。記録した場合、そのTweensyTimelineが再利用される。
- TweensyTimelineはトゥイーン完了後ガベージコレクションの対象となるように動いているようだが、別の参照が残っている場合対象とならない。こういう設計の時ならtureにしておくとメモリーのリソースを有効に活用できる。
以下のような動作で確認しみた。
TweensyGroupで動かすTweensyTimelineをパブリックな配列に格納している。(あまりこういう作りはないだろうが…)
これを繰り返し実行すると、useObjectPoolingの違いが確認できる。
public var timelines:Array = []; public var g:TweensyGroup; 〜中略〜 public function replay():void{ for each( var i:Logo in this.arr ){ var t:TweensyTimeline = g.to( i, { y:250 }, 1, Linear.easeNone, 0, null ); t.repeats = 1; t.repeatType = TweensyTimeline.YOYO; timelines.push( t ); } } |
サンプル:useObjectPooling = false
falseだとメモリーをどんどん消費していく。
サンプル:useObjectPooling = true
trueだと再利用される為、メモリーの消費が抑えられる。
ちなみに、trueにした方がフレームレート落ちるっぽい。
参照しなければfalseでもトゥイーン終了時にガベージコレクションの対象になるので通常falseでいいと思います。
-
refreshType:String
- トゥイーンをフレーム基準(frame)に計算するか、時間基準(time)に計算するかの設定。
- Tweensyクラスに定数が用意されている。
com.flashdynamix.motion.Tweensy.FRAME
com.flashdynamix.motion.Tweensy.TIME - フレーム基準の時、secondsPerFrameプロパティで1フレームの秒数を指定します。フレームレート30のswfの時、1/30を設定した場合timeを設定したのと同じ30フレームで1秒のトゥイーンをします。